package io.aicn.lowcode.service.dbmanager;

import com.baomidou.mybatisplus.extension.service.IService;
import io.aicn.lowcode.entity.dbmanager.DataSource;

import java.util.List;

/**
 * 数据源配置Service接口
 * 
 * @author lowcode-generator
 * @since 2025-01-25
 */
public interface IDataSourceService extends IService<DataSource> {

    /**
     * 测试数据源连接
     * 
     * @param dataSource 数据源配置
     * @return 连接测试结果
     */
    boolean testConnection(DataSource dataSource);

    /**
     * 根据状态查询数据源列表
     * 
     * @param status 连接状态
     * @return 数据源列表
     */
    List<DataSource> listByStatus(String status);

    /**
     * 根据数据库类型查询数据源列表
     * 
     * @param type 数据库类型
     * @return 数据源列表
     */
    List<DataSource> listByType(String type);

    /**
     * 根据名称模糊查询数据源
     * 
     * @param name 数据源名称
     * @return 数据源列表
     */
    List<DataSource> listByNameLike(String name);

    /**
     * 检查数据源名称是否存在
     * 
     * @param name 数据源名称
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 是否存在
     */
    boolean existsByName(String name, Long excludeId);

    /**
     * 创建数据源并测试连接
     * 
     * @param dataSource 数据源配置
     * @return 创建结果
     */
    DataSource createWithTest(DataSource dataSource);

    /**
     * 更新数据源连接状态
     * 
     * @param id 数据源ID
     * @param status 连接状态
     * @return 更新结果
     */
    boolean updateStatus(Long id, String status);

    /**
     * 刷新所有数据源连接状态
     * 
     * @return 刷新结果统计
     */
    String refreshAllStatus();

    /**
     * 查询所有数据源（不包含config字段）
     * 
     * @return 数据源列表
     */
    List<DataSource> listWithoutConfig();
}